/*******************************************************************************
 * 	Copyright 2016 ContainX and OpenStack4j                                          
 * 	                                                                                 
 * 	Licensed under the Apache License, Version 2.0 (the "License"); you may not      
 * 	use this file except in compliance with the License. You may obtain a copy of    
 * 	the License at                                                                   
 * 	                                                                                 
 * 	    http://www.apache.org/licenses/LICENSE-2.0                                   
 * 	                                                                                 
 * 	Unless required by applicable law or agreed to in writing, software              
 * 	distributed under the License is distributed on an "AS IS" BASIS, WITHOUT        
 * 	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the         
 * 	License for the specific language governing permissions and limitations under    
 * 	the License.                                                                     
 *******************************************************************************/
package com.huawei.openstack4j.model.senlin.builder;

import java.util.ArrayList;
import java.util.Map;

import com.huawei.openstack4j.common.Buildable;
import com.huawei.openstack4j.model.senlin.ClusterActionCreate;

/**
 * This interface describes a builder for {@link ClusterActionCreate} objects
 * 
 * @author lion
 */
public interface ClusterActionCreateBuilder extends Buildable.Builder<ClusterActionCreateBuilder, ClusterActionCreate> {

	/**
	 *  Add one or more nodes, as a list, to a cluster
	 *
	 * @param addNodes the list of node
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder addNodes(Map<String, ArrayList<String>> addNodes);

	/**
	 *  Delete one or more nodes, as a list, from a cluster
	 *
	 * @param delNodes the list of node
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder delNodes(Map<String, ArrayList<String>> delNodes);

	/**
	 *  Enlarge the cluster by count number of nodes
	 *
	 * @param scaleOut count number of nodes
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder scaleOut(Map<String, String> scaleOut);

	/**
	 *  Shrink the cluster by count number of nodes
	 *
	 * @param scaleIn count number of nodes
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder scaleIn(Map<String, String> scaleIn);

	/**
	 *  Change the size of the cluster
	 *
	 * @param resize size of the cluster
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder resize(Map<String, String> resize);

	/**
	 *  Check the health status of a cluster
	 *
	 * @param check check info
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder check(Map<String, String> check);

	/**
	 *  Recover a cluster from its current unhealthy status
	 *
	 * @param recover its current unhealthy status
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder recover(Map<String, String> recover);

	/**
	 *  Attach a policy to a cluster
	 *
	 * @param policyAttach  parameters for the policy attachment
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder policyAttach(Map<String, String> policyAttach);

	/**
	 *  Detach a policy from a cluster
	 *
	 * @param policyDetach parameters for the policy attachment
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder policyDetach(Map<String, String> policyDetach);

	/**
	 *  Update the policy attachment
	 *
	 * @param policyUpdate property settings
	 * @return ClusterActionCreateBuilder
	 */
	ClusterActionCreateBuilder policyUpdate(Map<String, String> policyUpdate);

}
